In large applications, testing an application having many instructions presents a complex challenge. For instance, when analyzing the numerous interactions and configurations posed by such instructions, the challenge is even greater making it difficult to reach one hundred percent testing for all combinations of instructions. Currently, there are two main methods for testing: manual and automatic. Manual tests are usually performed on the system itself which in many cases is an expensive resource. Current automatic test methods usually employ a simple “record and play” feature which consumes a lot of time for creation and maintenance and requires significant experience in automation development.